package com.sheng.leetcode.year2022.month02.day23;

import org.junit.Test;

/**
 * @Date 2022/2/23 17:02
 * @author liusheng
 * 917. 仅仅反转字母
 * 给你一个字符串 s ，根据下述规则反转字符串：
 * 所有非英文字母保留在原有位置。
 * 所有英文字母（小写或大写）位置反转。
 * 返回反转后的 s 。
 * 示例 1：
 * 输入：s = "ab-cd"
 * 输出："dc-ba"
 * 示例 2：
 * 输入：s = "a-bC-dEf-ghIj"
 * 输出："j-Ih-gfE-dCba"
 * 示例 3：
 * 输入：s = "Test1ng-Leet=code-Q!"
 * 输出："Qedo1ct-eeLg=ntse-T!"
 * 提示
 * 1 <= s.length <= 100
 * s 仅由 ASCII 值在范围 [33, 122] 的字符组成
 * s 不含 '\"' 或 '\\'
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/reverse-only-letters
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class LeetCode0917 {

    @Test
    public void test01(){
        String str = "Test1ng-Leet=code-Q!";
        System.out.println(new Solution().reverseOnlyLetters(str));
    }

}
class Solution {
    public String reverseOnlyLetters(String s) {
        int length = s.length();
        StringBuilder stringBuilder = new StringBuilder(s);
        int j = length - 1;
        for (int i = 0; i < length; i++) {
            if (i >= j) {
                break;
            }
            char z = stringBuilder.charAt(i);
            boolean b1 = z >= 'a' && z <= 'z' || z >= 'A' && z <= 'Z';
            if (b1) {
                boolean flag = true;
                while (flag) {
                    char f = stringBuilder.charAt(j);
                    boolean b2 = f >= 'a' && f <= 'z' || f >= 'A' && f <= 'Z';
                    if (b2) {
                        stringBuilder.setCharAt(i, f);
                        stringBuilder.setCharAt(j, z);
                        j--;
                        flag = false;
                    } else {
                        j--;
                    }
                }
            } else {
                continue;
            }
        }
        return stringBuilder.toString();
    }
}
